/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package zonasoft.Manejadores;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

import zonasoft.Conceptos.Candidato;
import zonasoft.Conceptos.Lider;
import zonasoft.Conceptos.Usuario;

/**
 *
 * @author JORGE
 */
public class ManejadorCandidato {

    public static Connection con;
    public static Connection conm;

    /**Consulta de un candidato por su id
     */
    public static Candidato getCandidato(String idcandidato) throws SQLException {
        if (idcandidato == null) {
            throw new SQLException("no hay elemento clave en la clase Candidato");
        }

        ResultSet rs = null;
        PreparedStatement pst = null;
        Candidato candidato = null;
        try {
            pst = con.prepareStatement("select * from candidato where idcandidato = ?");
            pst.setString(1, idcandidato.trim());
            rs = pst.executeQuery();
            while (rs.next()) {
                candidato = Candidato.load(rs);
            }
        } finally {
            if (rs != null) {
                rs.close();
            }
            if (pst != null) {
                pst.close();
            }
            return candidato;
        }
    }// fin del get

    public static Candidato getCandidatoE(String ideleccion, String idCandidato) throws SQLException {
        if (ideleccion == null || idCandidato == null) {
            throw new SQLException("no hay elemento clave en la clase ideleccion");
        }

        ResultSet rs = null;
        PreparedStatement pst = null;

        Candidato candidato = null;
        try {
//            pst = con.prepareStatement("select * from candidato c, eleccion e where e.ideleccion = ? and e.ideleccion = c.ideleccion ");
           pst = con.prepareStatement("SELECT  candidato.*  FROM zonificacion.candidato INNER JOIN zonificacion.eleccion ON (candidato.ideleccion = eleccion.ideleccion) where candidato.idcandidato = ? and candidato.ideleccion = ?");
          
            System.out.println("idCandidato = " + idCandidato);
            System.out.println("ideleccion = " + ideleccion);
            pst.setString(2, ideleccion.trim());
            pst.setString(1, idCandidato.trim());
            rs = pst.executeQuery();
            //while (rs.next()) {
            if(rs.next()){
            candidato = Candidato.load(rs);
            }
        } catch(Exception ex){

            ex.printStackTrace();
           // }
        } finally {
            if (rs != null) {
                rs.close();
            }
            if (pst != null) {
                pst.close();
            }
            

        }
        return candidato;
    }// fin del    return candidato; getEleccion

    public static void crearCandidato(Candidato ca) throws SQLException {
        if (con == null) {
            throw new SQLException("no hay conexion");
        }
        PreparedStatement pst = null;
        try {
            pst = con.prepareStatement("insert into candidato values (?,?,?,?,?,?,?,?,?)");
            pst.setString(1, ca.getIdCandidato());
            pst.setString(2, ca.getIdEleccion());
            pst.setString(3, ca.getNombre());
            pst.setString(4, ca.getApellido());
            pst.setString(5, ca.getCorreo());
            pst.setString(6, ca.getTelefono());
            pst.setInt(7, ca.getHojaVida());
            pst.setString(8, ca.getDireccion());
            pst.setString(9, ca.getBarrio());


            pst.executeUpdate();
        } finally {
            if (pst != null) {
                pst.close();
            }
        }
    }// fin de la clase crear eleccion

    public static boolean ModificarCandidato(Candidato ca, String idcandidato) throws SQLException {

        if (getCandidato(idcandidato) == null) {
            throw new SQLException("Candidato Registrado");
        }
        PreparedStatement pst = null;
        boolean res = false;
        try {
            pst = con.prepareCall("update candidato set idcandidato =?, idEleccion =?, nombre = ?, "
                    + "apellido=?, correo=?, telefono=?, hojaVida=?, barrio=?, direccion=?  "
                    + "where idCandidato=?");
            pst.setString(1, ca.getIdCandidato());
            pst.setString(2, ca.getIdEleccion());
            pst.setString(3, ca.getNombre());
            pst.setString(4, ca.getApellido());
            pst.setString(5, ca.getCorreo());
            pst.setString(6, ca.getTelefono());
            pst.setInt(7, ca.getHojaVida());
            pst.setString(8, ca.getBarrio());
            pst.setString(9, ca.getDireccion());
            pst.setString(10, ca.getIdCandidato());
            int r = pst.executeUpdate();
            System.out.println("ca.getIdCandidato() = " + ca.getIdCandidato());

            if (r != 0) {
                res = true;
            }
        } finally {
            if (pst != null) {
                pst.close();
            }
        }
        return res;
    }

    public static Collection listaCandidato() throws Exception {

        try {
            Collection<Candidato> can = new ArrayList<Candidato>();

            String sentencia = "select c.idcandidato, c.nombre, c.apellido, c.telefono, c.correo, e.nombre from candidato c, eleccion e where e.ideleccion = c.ideleccion";
//String sentencia = "select c.idcandidato, c.nombre, c.apellido, c.telefono, c.profesion,  c.ideleccion from candidato c";
            ManejadorBaseDatos mbd = ManejadorBaseDatos.getInstancia();
            mbd.conectar();
            PreparedStatement pstmt = (PreparedStatement) mbd.crearSentencia(sentencia);
            ResultSet filasBD = mbd.consultaFilas(pstmt);
            while (filasBD.next()) {
                Candidato el = Candidato.load(filasBD);
                can.add(el);
            }
            return can;
        } catch (Exception ex) {
            throw new Exception("Resultado Negativo de la Base de Datos " + ex.getMessage());
        }
    }

    public static Vector listarCandidatos2() throws Exception {
        try {
            Vector<Candidato> cand = new Vector<Candidato>();
            String sentencia = "Select candidato.ideleccion, candidato.idcandidato, candidato.nombre,  candidato.apellido,  candidato.correo,  candidato.telefono from candidato";
            ManejadorBaseDatos mbd = ManejadorBaseDatos.getInstancia();
            mbd.conectar();
            PreparedStatement pstmt = (PreparedStatement) mbd.crearSentencia(sentencia);
            ResultSet filasBD = mbd.consultaFilas(pstmt);
            while (filasBD.next()) {
                Candidato can = Candidato.load2(filasBD);
                cand.add(can);
            }
            return cand;

        } catch (Exception ex) {
            // Logger.getLogger(ManejadorSimpatizante.class.getName()).log(Level.SEVERE, null, ex);
            throw new Exception("Resultado Negativo de la Base de Datos " + ex.getMessage());
        }
    }

    public static boolean EliminarCandidato(String idCandidato) throws SQLException {
        if (getCandidato(idCandidato) == null) {
            throw new SQLException("Candidato registrado");
        }
        PreparedStatement pst = null;
        boolean res = false;
        try {
            pst = conm.prepareStatement("delete from candidato where idcandidato = ?");
            pst.setString(1, idCandidato.trim());
            int r = pst.executeUpdate();

            if (r != 0) {
                res = true;
            }
        } finally {
            if (pst != null) {
                pst.close();
            }
        }
        return res;
    }

   public static Collection listaAllCandidato() throws Exception {

        try {
            Collection<Candidato> can = new ArrayList<Candidato>();

            String sentencia = "SELECT c.idcandidato, CONCAT(c.nombre,' ',c.apellido) AS candidato FROM candidato c ORDER BY c.nombre asc";
//String sentencia = "select c.idcandidato, c.nombre, c.apellido, c.telefono, c.profesion,  c.ideleccion from candidato c";
           // ManejadorBaseDatos mbd = ManejadorBaseDatos.getInstancia();
           // mbd.conectar();
            PreparedStatement pstmt = (PreparedStatement) con.prepareStatement(sentencia);
            ResultSet filasBD = pstmt.executeQuery();
            while (filasBD.next()) {
                Candidato el = Candidato.load3(filasBD);
                can.add(el);
            }
            return can;
        } catch (Exception ex) {
            throw new Exception("Resultado Negativo de la Base de Datos " + ex.getMessage());
        }
    }

      public static Lider getLiderPropio(String idLider) {
        if (idLider == null) {
            try {
                throw new SQLException("no hay elemento clave en la clase Lider");
            } catch (SQLException ex) {
                Logger.getLogger(ManejadorZonificados.class.getName()).log(Level.SEVERE, null, ex);
                ex.printStackTrace();
            }
        }
//        System.out.println("idZonificados = " + idZonificados);
        ResultSet rs = null;
        PreparedStatement pst = null;
        Lider lider = null;
        try {
            pst = con.prepareStatement("select * from lider where idLider = ?");
            pst.setString(1, idLider.trim());
            rs = pst.executeQuery();
            while (rs.next()) {
              lider = Lider.load(rs);
            }


//   System.out.print(zonificados + "el de get");
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            if (rs != null) {
//                rs.close();
            }
            if (pst != null) {
                try {
                    pst.close();
                } catch (SQLException ex) {
                    ex.printStackTrace();
                    Logger.getLogger(ManejadorZonificados.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            return lider;
        }
    }


}// fin de la clase Manejadora

